﻿using System.Collections.Generic;
using System.Linq;

namespace 揭秘LINQ方法的背后
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int[] nums = new int[] { 3, 5, 3453, 33, 2, 9, 35 };
            //1、IEnumerable 需引入泛型 System.Collections.Generic;
            //2、where 需引入System.Linq;
            //3、where方法会遍历集合中的每个元素，对于每个元素都调用x => x > 10这个表达式判断一下是否为ture，为ture返回到集合中
            //4、var 类型推断
            IEnumerable<int> list = nums.Where(x => x > 10);
            foreach (int x in list)
            {
                Console.WriteLine(x);
            }
            Console.WriteLine("=================");
            //使用自己的定义扩展方法
            IEnumerable<int> list1 = Mywhere(nums, x => x > 10);
            foreach (int x in list1)
            {
                Console.WriteLine(x);
            }
            //使用自己的定义扩展方法
            IEnumerable<int> list2 = Mywhere1(nums, x => x > 10);
            foreach (int x in list2)
            {
                Console.WriteLine(x);
            }
        }

        static IEnumerable<int> Mywhere(IEnumerable<int> item, Func<int, bool> f)
        {
            List<int> list = new List<int>();
            foreach (int x in item)
            {
                if (f(x) == true)
                {
                    list.Add(x);
                }
            }
            return list;
        }

        static IEnumerable<int> Mywhere1(IEnumerable<int> item, Func<int, bool> f)
        {
            foreach (int x in item)
            {
                if (f(x) == true)
                {
                    yield return x;
                }
            }
        }
    }
}